home *** CD-ROM | disk | FTP | other *** search
/ Aminet 12 / Aminet 12 (1996)(GTI - Schatztruhe)[!][Jun 1996].iso / Aminet / util / batch / from.lha / from / from.c next >
Encoding:
C/C++ Source or Header  |  1996-04-03  |  1.7 KB  |  83 lines

  1. /* from 
  2.    Freeware (C) Thomas Radtke 1996
  3.    revision: 31.03.1996
  4. */
  5.  
  6. #include <dos/dos.h>
  7. #include <dos/var.h>
  8.  
  9. #ifndef HAVE_XMALLOC
  10. int xmalloc(int size)
  11. {
  12.     int retval;
  13.  
  14.     if (!(retval=malloc(size))) {
  15.         printf("can't allocate %d bytes\n");
  16.         exit(20);
  17.     }
  18.     return retval;
  19. }
  20. #endif /* HAVE_XMALLOC */
  21.  
  22. char row_var[100],col_var[5],*col_item[1024],arg_buffer[1024],command[1024];
  23.  
  24. main(int argc,char **argv)
  25. {
  26.     struct FileHandle *fh_in=0;
  27.     int file=1,i,j,row=0;
  28.  
  29.     if (argc<3) {
  30.         printf("syntax: %s <list|-> <command> [{args}]\n",*argv);
  31.         exit(20);
  32.     }
  33.  
  34.     strcpy(command,argv[2]);
  35.     for (j=3; j<argc; j++)
  36.     {
  37.         strcat(command," ");
  38.         strcat(command,argv[j]);
  39.     }
  40.  
  41.     if (!strcmp(argv[1],"-"))
  42.     {
  43.         fh_in=(struct FileHandle *)Input();
  44.         FGets(fh_in,arg_buffer,1024);
  45.         file=0;
  46.     }
  47.     else if (!(fh_in=(struct FileHandle *)Open(argv[1],MODE_OLDFILE)))
  48.     {
  49.         printf("can't open %s\n",argv[1]);
  50.         exit(20);
  51.     }
  52.     SetVar("0",argv[2],1+strlen(argv[2]),GVF_LOCAL_ONLY);
  53.     while (1)
  54.     {
  55.         if (!FGets(fh_in,arg_buffer,1024)) break;
  56.         j=0;
  57.         for (i=0; i<1024; i++)
  58.         {
  59.             sprintf(col_var,"%d",i+1);
  60.             col_item[i]=(char *)xmalloc(1024);
  61.             if (sscanf(&arg_buffer[j],"%s",col_item[i])==-1) break;
  62.             while (arg_buffer[j]<33 && arg_buffer[j]>0) j++;
  63.             j+=strlen(col_item[i]);
  64.             while (arg_buffer[j]<33 && arg_buffer[j]>0) j++;
  65.             SetVar(col_var,col_item[i],1+strlen(col_item[i]),GVF_LOCAL_ONLY);
  66.         }
  67.         sprintf(row_var,"%d",row);
  68.         SetVar("row",row_var,1+strlen(row_var),GVF_LOCAL_ONLY);
  69.         Execute(command,0,0);
  70.         DeleteVar("row",GVF_LOCAL_ONLY);
  71.         for (j=0; j<i; j++)
  72.         {
  73.             sprintf(col_var,"%d",j+1);
  74.             DeleteVar(col_var,GVF_LOCAL_ONLY);
  75.             free(col_item[j]);
  76.         }
  77.         row++;
  78.     }
  79.     DeleteVar("0",GVF_LOCAL_ONLY);
  80.     if (file) Close(fh_in);
  81.     exit(0);
  82. }
  83.